package com.lfd.mapstruct.struct;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
 * @项目名： spring-emq
 * @包名： com.lfd.mapstruct.struct
 * @文件名: UserMapper
 * @创建者: liufudong@szyh-smart.com
 * @创建时间: 2024/10/19 23:34
 * @描述：
 */
@Mapper(componentModel = "spring")
public interface UserMapper {
    @Mapping(source = "name",target = "fullName")
    @Mapping(source = "email",target = "emailAddress")
    @Mapping(target = "cid", expression = "java(userDTO != null ? (userDTO.getCid() != null ? userDTO.getCid() : (userDTO.getId() == null ? 0 : userDTO.getId())) : 0)")
    User toEntity(UserDTO userDTO);



    // 自动映射的规则
    //相同字段名：如果源对象和目标对象的字段名相同，MapStruct 会自动进行映射，不需要手动添加 @Mapping。例如，如果 UserDTO 和 User 都有相同名称的 email 字段，则不需要写 @Mapping 注解。
    //不同字段名：当字段名称不同但需要映射时，必须使用 @Mapping 来明确指定映射规则。
    @Mapping(source = "fullName",target = "name")
    @Mapping(source = "emailAddress",target = "email")
    @Mapping(target = "cid", expression = "java(user != null ? (user.getCid() != null ? user.getCid() : (user.getId() == null ? 0 : user.getId())) : 0)")
    UserDTO toDTO(User user);

    // 定义对象克隆方法
    User clone(User user);


}
